home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / AFdigitale (IT).ifs < prev    next >
Encoding:
Text File  |  2004-04-14  |  8.1 KB  |  239 lines

  1. // GETINFO SCRIPTING
  2. // AFdigitale.it - by Pivello
  3.  
  4. (**************************************************
  5. *  Movie importation script for:                  *
  6. *  AFdigitale.it, http://www.AFdigitale.it        *
  7. *                                                 *
  8. * (c) 2004 Pivello                                *
  9. *                                                 *
  10. *  14.04.2004 First Public Release                *
  11. *                                                 *
  12. *  For use with Ant Movie Catalog 3.4.1           *
  13. *  www.ant.be.tf/moviecatalog ╖╖╖ www.buypin.com  *
  14. *                                                 *
  15. *  The source code of the script can be used in   *
  16. *  another program only if full credits to        *
  17. *  script author and a link to Ant Movie Catalog  *
  18. *  website are given in the About box or in       *
  19. *  the documentation of the program               *
  20. ***************************************************)
  21.  
  22. program AFdigitale;
  23.  
  24. const
  25.  UrlBase = 'http://www.afdigitale.it';
  26.  QueryBase = UrlBase + '/edisport/afdigitale/dvd.nsf/DVDS?SearchView&Query=';
  27.  
  28. var
  29.  Page: TStringList;
  30.  MovieUrl, MovieName, OriginalStr, TranslatedStr, PageStr:  string;
  31.  
  32. // ---------------------------------------------
  33. // PAGE PACKING (remove extra spaces, tabs & CR)
  34. // IN:  page Url     (string)
  35. // OUT: compact page (string)
  36. // ---------------------------------------------
  37. function RemoveExtraChars(Url: string): string;
  38. var
  39.   Temp: string;
  40.   PackedPage: string;
  41.   CharPos: Integer;
  42.   n: Integer;
  43. begin
  44.   Page.Text := GetPage(Url);
  45.   for n:=0 to Page.Count-1 do
  46.    PackedPage := PackedPage + ' ' + Page.GetString(n);
  47.   repeat
  48.    CharPos := pos('  ', PackedPage);
  49.    if CharPos = 0 then
  50.     CharPos := pos(#9, PackedPage);
  51.    if CharPos <> 0 then
  52.     begin
  53.      Temp := copy(PackedPage, 1, CharPos -1);
  54.      Delete(PackedPage, 1, CharPos);
  55.      PackedPage := Temp + PackedPage;
  56.     end;
  57.   until((pos('  ', PackedPage) = 0) and (pos(#9, PackedPage) = 0));
  58.   result := PackedPage;
  59. end;
  60.  
  61. // ---------------------------------
  62. // GET FIELD VALUES FROM PACKED PAGE
  63. // IN:  Start marker     (String)
  64. //      End marker       (string)
  65. //      Cut Start Marker (bool)
  66. //      Cut End Marker   (bool)
  67. // OUT: value            (string)
  68. // ---------------------------------
  69. function GetValue(StartMarker, EndMarker: string; CutStartMarker, CutEndMarker: boolean): string;
  70. var
  71.  StartPos: integer;
  72.  EndPos: integer;
  73.  Value: string;
  74. begin
  75.  Value := '';
  76.  StartPos := pos(StartMarker, PageStr);
  77.  if (StartPos > 0) then
  78.   Delete(PageStr, 1, StartPos-1);
  79.  StartPos := pos(StartMarker, PageStr);
  80.  EndPos := pos(EndMarker, PageStr);
  81.  if ((StartPos > 0)and(EndPos > 0)) then
  82.   begin
  83.    if CutStartMarker then
  84.     StartPos := StartPos + length(StartMarker);
  85.    if not CutEndMarker then
  86.     EndPos := EndPos + length(EndMarker);
  87.    Value := copy(PageStr, StartPos, EndPos-Startpos);
  88.    Delete(PageStr, 1, EndPos);
  89.   end;
  90.  result := Value;
  91. end;
  92.  
  93. // -----------------------
  94. // ANALYZE MOVIE DATA PAGE
  95. // IN:  none
  96. // OUT: set Ant fields
  97. // -----------------------
  98. procedure AnalyzeMoviePage;
  99. var
  100.  TempStr: string;
  101. begin
  102.  // Get packed title main page
  103.  PageStr := RemoveExtraChars(MovieUrl);
  104.  // image
  105.  GetPicture(UrlBase + getValue('ROWSPAN=2><IMG SRC="','" WIDTH=',true,true), False);
  106.  // Translated Title field
  107.  SetField(fieldTranslatedTitle, getValue('COLOR="000080" FACE="Verdana">','</FONT></B><BR>',true,true));
  108.  // Original Title field
  109.  SetField(fieldOriginalTitle, getValue('COLOR="000080" FACE="Verdana">','</FONT></TD>',true,true));
  110.  if((GetField(fieldOriginalTitle)='id') or (GetField(fieldOriginalTitle)=''))then
  111.   SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle));
  112.  // Category Field
  113.  SetField(fieldCategory, getValue('</B><B><FONT SIZE=1 COLOR="000080" FACE="Verdana">','</FONT></B><BR>',true,true));
  114.  // Director Field
  115.  SetField(fieldDirector, getValue('<B><FONT SIZE=1 COLOR="000080" FACE="Verdana">','</FONT></B><BR>',true,true));
  116.  // Actors Field
  117.  SetField(fieldActors, getValue('<B><FONT SIZE=1 COLOR="000080" FACE="Verdana">','</FONT></B><BR>',true,true));
  118.  // YearField
  119.   SetField(fieldYear, getValue('<B><FONT SIZE=1 COLOR="000080" FACE="Verdana">','</FONT></B><BR>',true,true));
  120.  // Producer Field
  121.  Delete (PageStr,1,pos('Distribuito da:',PageStr));
  122.  SetField(fieldProducer, getValue('<B><FONT SIZE=1 COLOR="000080" FACE="Verdana">','</FONT></B>',true,true));
  123.  // Duration field
  124.  Delete (PageStr,1,pos('FACE="Verdana">Durata:</FONT>',PageStr));
  125.  SetField(fieldLength, getValue('COLOR="ffffff" FACE="Verdana">','</FONT></B><B>',true,true));
  126.  // Size Field
  127.  Delete (PageStr,1,pos('FACE="Verdana">Supporto: </FONT>',PageStr));
  128.  SetField(fieldSize, getValue('FACE="Verdana">','</FONT></B><BR>',true,true));
  129.  // Description Field
  130.  Delete (PageStr,1,pos('Qualitα artistica:',PageStr));
  131.  TempStr := getValue('<FONT SIZE=2 FACE="Verdana">','</FONT><BR>',true,true);
  132.  HTMLDecode(TempStr);
  133.  SetField(fieldDescription, TempStr);
  134.  // Comments Field
  135.  Delete (PageStr,1,pos('Qualitα dell''edizione:',PageStr));
  136.  TempStr := getValue('<FONT SIZE=2 FACE="Verdana">','</FONT><BR>',true,true);
  137.  HTMLDecode(TempStr);
  138.  SetField(fieldComments, TempStr);
  139.  // Movie URL field
  140.  SetField(fieldURL, MovieUrl);
  141.  // Display search result
  142.  DisplayResults;
  143. end;
  144.  
  145. // ------------------------------------------------------------------
  146. // FILL PICKTREE CONTROL WITH LINKS & TITLES or RETURN ONE PAGE LINK
  147. // if OneFilm flag true return Film Id else populate PickTree
  148. // IN:  OneFilm flag (bool)
  149. // OUT: one page ID  (string)
  150. // ------------------------------------------------------------------
  151. function PopulatePickTree(OneFilm: boolean): string;
  152. var
  153.   TempUrl: string;
  154.   TempTitle: string;
  155.   StartPos: integer;
  156.   EndPos: integer;
  157. begin
  158.  result := '';
  159.  StartPos := pos('<A HREF="', PageStr);
  160.  Delete(PageStr, 1, StartPos - 1);
  161.  if OneFilm then
  162.   begin
  163.    StartPos := pos('<A HREF="', PageStr);
  164.    EndPos := pos('"><div', PageStr);
  165.    if StartPos > 0 then
  166.     begin
  167.      TempUrl := copy(PageStr, StartPos + 9, EndPos-Startpos - 9);
  168.      result := UrlBase + TempUrl;
  169.     end
  170.   end
  171.  else
  172.   begin
  173.    PickTreeClear;
  174.    repeat
  175.     StartPos := pos('<A HREF="', PageStr);
  176.     EndPos := pos('?OpenDocument', PageStr);
  177.     if StartPos > 0 then
  178.      begin
  179.       TempUrl := copy(PageStr, StartPos + 9, EndPos-Startpos + 4);
  180.       Delete(PageStr, 1, EndPos + 1);
  181.       StartPos := pos('''">', PageStr);
  182.       EndPos := pos('</div>', PageStr);
  183.       TempTitle := copy(PageStr, StartPos + 3, EndPos-Startpos - 3);
  184.       Delete(PageStr, 1, EndPos + 1);
  185.       PickTreeAdd(TempTitle, UrlBase + TempUrl);
  186.      end;
  187.    until(StartPos = 0);
  188.   end
  189. end;
  190.  
  191. // ---------------------------------
  192. // ANALYZE FIRST SEARCH RESULT PAGE:
  193. // IN:  none
  194. // OUT: none
  195. // ---------------------------------
  196. procedure AnalyzeSearchPage;
  197. begin
  198.  PageStr := RemoveExtraChars(MovieUrl);
  199.  if pos('Nessun elemento trovato', PageStr) > 0 then
  200.    ShowMessage('Title not found / Nessun film trovato.')
  201.  else if pos('Si Φ verificato un errore',PageStr) > 0 then
  202.    ShowMessage('Server not available, try later / Server non disponibile, prova pi∙ tardi')
  203.  else
  204.   begin
  205.    if pos('1 elemento trovato', PageStr) > 0 then
  206.     MovieUrl := PopulatePickTree(true)  // One title found
  207.    else
  208.     begin
  209.      PopulatePickTree(false);           // More titles found..
  210.      if not PickTreeExec(MovieUrl) then // ..select one
  211.       exit;
  212.     end
  213.    AnalyzeMoviePage;
  214.   end;
  215. end;
  216.  
  217. // ----------
  218. // MAIN:
  219. // IN:  none
  220. // OUT: none
  221. // ----------
  222. begin
  223.  if CheckVersion(3,4,1) then
  224.   begin
  225.    TranslatedStr := GetField(fieldTranslatedTitle);
  226.    OriginalStr := GetField(fieldOriginalTitle);
  227.    if (TranslatedStr <> '') then MovieName := TranslatedStr else MovieName := OriginalStr;
  228.    if (Input('AFdigitale.it - By Pivello', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
  229.     begin
  230.      Page := TStringList.Create;
  231.      MovieUrl := QueryBase + UrlEncode(MovieName);
  232.      AnalyzeSearchPage;
  233.      Page.Free;
  234.     end;
  235.   end
  236.  else
  237.   ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.1)');
  238. end.
  239.